#!/usr/bin/env python
#encoding latin1

from grafo import *
"""
pre: El archivo "mapa.csv" existe.
post: Devuleve un diccionario que contiene esquinas y calles del
archivo "mapa.csv" juntos con sus respectivos datos.
"""
def cargar_mapa(nombre_archivo):
	mapa = dict()
	with open(nombre_archivo,mode = 'rU') as archivo:
		cantidad_esquinas = int(archivo.readline())
		for i in range(cantidad_esquinas):
			linea = archivo.readline()
			datos = linea.split(',')
			datos[0] = int(datos[0])
			mapa[datos[0]] = list(float(x) for x in datos[1:])
		cantidad_calles = int(archivo.readline())
		for i in range(cantidad_calles):
			linea = archivo.readline()
			datos = linea.split(',')
			datos[1] = int(datos[1])
			datos[2] = int(datos[2])
			mapa[datos[1]].append(datos[2])
			mapa[datos[2]].append(datos[1])
	return mapa
"""
Post: Devulve el modulo de un vector 2-upla
"""
def distancia(a,b):
	return pow(a**2 + b**2,0.5)
"""
Post: Devuelve un grafo a partir del dicionario "mapa".
Cada arista del grafo devulto representa una esquina mientras que 
las calles representan aristas cuyo peso es la distancia euclidea
entre esquinas.
"""
def generar_grafo(mapa):
	grafo = nuevo_grafo()
	for n in mapa.keys():
		grafo_agregar_nodo(grafo,n)
	for nombre_nodo in mapa.keys():
		nodo = mapa[nombre_nodo]
		for nombre_nodo_2 in nodo[4:]:
			nodo_2 = mapa[nombre_nodo_2]
			dist = distancia(nodo[0] - nodo_2[0],nodo[1] - nodo_2[1])
			grafo_agregar_conexion(grafo,nombre_nodo,nombre_nodo_2,dist)
	return grafo
